//接口：用于规定实现类“必需具备XXX特征/YYY行为”
abstract interface class Shape {      //Dart语言中“抽象类/接口”都用 abstract interface class
  //String bgColor = 'WHITE';   //接口中的属性不能有值
  late String bgColor;

  // Shape(this.bgColor);     //接口中不能声明构造方法

  /*setBgColor(String c){     //接口中所有方法都必须是“抽象的”，不能存在有方法体的方法
    this.bgColor = c;
  }*/

  getSize();  //抽象方法：形状类应该提供“计算面积”方法，但是却无法提供
}

abstract interface class A{
  late String bgColor;
  f1();
  getSize();
}

//一个类可以同时实现多个“父接口” —— Dart支持“多实现”
class Rectangle implements Shape, A {
  late int width;
  late int height;
  @override
  late String bgColor;

  Rectangle(this.bgColor, this.width, this.height); //子类为“父接口”成员赋值，必需使用this，不能用super

  @override
  getSize() {
    return this.width * this.height;
  }
  
  @override
  f1() {
  }

}

main(){
  Shape  s1 = Rectangle('YELLOW', 100, 200);
  print(s1);   
}